#include <iostream>

template <int N>
struct Fibonacci {
    static constexpr int value =
        Fibonacci<N - 1>::value + Fibonacci<N - 2>::value;
};

template <>
struct Fibonacci<0> {
    static constexpr int value = 0;
};

template <>
struct Fibonacci<1> {
    static constexpr int value = 1;
};

int main() {
    constexpr int f0 = Fibonacci<0>::value;
    constexpr int f1 = Fibonacci<1>::value;
    constexpr int f5 = Fibonacci<5>::value;
    constexpr int f10 = Fibonacci<10>::value;

    std::cout << "Fibonacci<0>::value: " << f0 << std::endl;    // 输出 0
    std::cout << "Fibonacci<1>::value: " << f1 << std::endl;    // 输出 1
    std::cout << "Fibonacci<5>::value: " << f5 << std::endl;    // 输出 5
    std::cout << "Fibonacci<10>::value: " << f10 << std::endl;  // 输出 55

    return 0;
}